<?php  if (!defined('DB_PEREFIX')) exit;

global $db, $template, $GLOBAL_USER;

if ($GLOBAL_USER['user_id'] > 0) 
{
	// Загружаем информациб о пользователе
	$user = $db->fetch_array ($db->query ("SELECT * 
		FROM ".DB_PEREFIX."_users 
		WHERE user_id = '".$GLOBAL_USER['user_id']."' LIMIT 1;"));

	// Определяем путь к аватару
	($user['user_avatar'] != '') 
		? $user['user_avatar'] = '/uploads/avatars/'.$user['user_id'].'.jpg'
		: $user['user_avatar'] = '/images/u_noavatar.gif';
		

	// Если запрос на обновление данных
	if (isset($_POST['save'])) 
	{	
		// Получаем имя
		$nname = xss_clean( strip_tags($_POST['name']));

		// Получаем адрес эелектронной почты
		$nemail = strip_tags($_POST['email']);

		// Получаем номер icq
		$nicq = xss_clean( strip_tags(trim($_POST['icq'])));
		// Очищаем от разделителей
		$nicq = str_replace ('-', '', $nicq);
		$nicq = str_replace (' ', '', $nicq);
	
		// Получаем адрес сайта
		$nhttp = xss_clean( strip_tags($_POST['http']));
		$nhttp = str_replace ('http://', '', $nhttp);


		if ($_POST['name'] != '' && $_POST['email'] != '') 
		{
			// Строка для хранения списка ошибок
			$error = '';	
	
			// Если email изменился
			if ($user['user_email'] != $nemail)
			{
				// Проверяем занят ли email	
				$check_email = $db->query ("SELECT user_email 
					FROM ".DB_PEREFIX."_users 
					WHERE user_email = '$nemail' AND user_id != '".$GLOBAL_USER['user_id']."'");

				if ($db->num_rows($check_email) > 0) 
					$error .= '<li>'._l('err_email');
					
				// Проверяем формат почтового адреса
				if (!eregi("^[a-z0-9\._-]+@[a-z0-9\._-]+\.[a-z]{2,4}\$",$nemail)) 
					$error .= '<li>'._l('err_email');
			}


			// Если имя изменилось
			if ($user['user_name'] != $nname)
			{
				$check_name = $db->query ("SELECT user_name 
					FROM ".DB_PEREFIX."_users 
					WHERE user_name = '$nname' AND user_id != '".$GLOBAL_USER['user_id']."'");
					
				if ($db->num_rows($check_name) > 0) 
					$error .= '<li>'._l('err_exist_name');	
					
				// Проверяем состоит ли имя только из букв и цифр
				if (!preg_match("#^[а-яА-ЯЁёa-zA-Z0-9_-]+$#", $nname)) 
					$error .= '<li>'._l('err_alph_name');					
		
				// Проверям имя на диапазон длины
				if (mb_strlen($nname) < 4 || 
					mb_strlen($nname) > 30)
					$error .= '<li>'._l('err_len_name');
			}
	
			// Если загружается аватар
			if ($_FILES['image']['name'] != "") 
			{
				if ( copy($_FILES['image']['tmp_name'], "modules/system/cache/".$_FILES['image']['name']) && 
					eregi('[а-яА-ЯA-Za-z0-9]\.(jpeg|jpg|gif|png|bmp|JPEG|JPG|GIF|PNG|BMP)', $_FILES['image']['name'])) 
				{
					if (save_image ("modules/system/cache/".$_FILES['image']['name'], $GLOBAL_USER['user_id'])) 
						$file = $GLOBAL_USER['user_id'].".jpg";
					else 
						$error .= "\n<li>Ошибка загрузки изоображения (2)!"; 

				}				
				else 
					$error .= "\n<li>Ошибка загрузки изоображения (1)!";

			}

			// Если установлен флаг удаления аватара
			if ($_POST['d_avatar'] == 'true' && $user['user_avatar'] != '') 
			{
				if (mb_substr ($user['user_avatar'], 0, 1) == '/') 
					$user['user_avatar'] = mb_substr ($user['user_avatar'], 1, mb_strlen($user['user_avatar'])-1);

				if ($db->query("UPDATE ".DB_PEREFIX."_users SET user_avatar = '' WHERE user_id = '$id'") && unlink($user['user_avatar'])) 
				{ 
					$file = ''; 
					site_message ('Аватар удален'); 
				}
				else 
					$error .= '<li>Ошибка при удалении аватара!';
			}

			// Если ошибок небыло
			if ($error == '') 
			{
				// Обновляем профиль
				$put_user = $db->query("UPDATE ".DB_PEREFIX."_users SET
					user_name = '$nname',
					user_email = '$nemail',
					user_icq = '$nicq',
					user_http = '$nhttp',
					user_avatar = '$file'
					WHERE user_id = '".$GLOBAL_USER['user_id']."'");
		
				// Если обновился без ошибок
				if ($put_user) 
				{
					site_message ("Профиль сохранен!");
					$GLOBAL_USER = $db->fetch_array (
						$db->query ("SELECT * 
							FROM ".DB_PEREFIX."_users 
							WHERE user_id = '".$GLOBAL_USER['user_id']."'"));
							
				}
				else 
					site_error ("Ошибка сохранения профиля!");
			}
			else 
			{
				// Выводим список ошибок
				site_error ($error);
				
				if ($_FILES['avatar']['name'] != '' && 
					file_exists("uploads/avatars/".$_FILES['avatar']['name'])) 
					unlink ("uploads/avatars/".$_FILES['avatar']['name']);
			}
		}
		else 
		{
			site_error ("Не заполнены необходимые поля!");
		}
		
	}

	// Выводим представление 
	load_module_view('user', 'profile',  $user );
}

function save_image ($src, $id) 
{
	global $SITE;
	
	// Если источник существует
	if (!file_exists($src) || $src == '') return false;
	// TODO: Вставить проверку на соответствие MIME типов
	
	$name = 'uploads/avatars/'.$id.'.jpg';
	$sname = 'uploads/avatars/s'.$id.'.jpg';
	
	// Загружаем основу в зависимости от формата файла
	if(eregi('[ёЁА-Яа-яA-Za-z0-9]\.(jpeg|jpg|JPEG|JPG)', $src))
	{
		$thumbbase = imagecreatefromjpeg($src);
		$sthumbbase = imagecreatefromjpeg($src);
	}
	elseif(eregi('[ёЁА-Яа-яA-Za-z0-9]\.(gif|GIF)', $src)) 
	{
		$thumbbase = imagecreatefromgif($src);
		$sthumbbase = imagecreatefromgif($src);
	}
	elseif(eregi('[ёЁА-Яа-яA-Za-z0-9]\.(png|PNG)', $src)) 
	{
		$thumbbase = imagecreatefrompng($src);
		$sthumbbase = imagecreatefrompng($src);
	}
	elseif(eregi('[ёЁА-Яа-яA-Za-z0-9]\.(bmp|wbmp|BMP|wbmp)', $src))
	{
		$thumbbase = imagecreatefromwbmp($src);		
		$sthumbbase = imagecreatefromwbmp($src);
	}
	else 
		exit;
	
	$width = imagesx($thumbbase);
	$height = imagesy($thumbbase);
	
	// Определяем новый размер аватара
	if ($width > $SITE['max_avatar'] || $height > $SITE['max_avatar']) 
	{
		$k = max($width/$SITE['max_avatar'], $height/$SITE['max_avatar']);
		$new_width = intval($width / $k);
		$new_height = intval($height / $k);
	}
	else 
	{
		$new_width = $width;
		$new_height = $height;
	}
	
		// Определяем новый размер аватара
	if ($width > 24 || $height > 24) 
	{
		$k = max($width/24, $height/24);
		$snew_width = intval($width / $k);
		$snew_height = intval($height / $k);
	}
	else 
	{
		$snew_width = 24;
		$snew_height = 24;
	}	
		
	// Создаем новый объект изображения
	$thumb = imagecreatetruecolor ($new_width, $new_height);
	$sthumb = imagecreatetruecolor ($snew_width, $snew_height);	
	// Переносим и сжимаем нужную часть загружаемого аватара
	imagecopyresampled($thumb, $thumbbase, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
	imagecopyresampled($sthumb, $sthumbbase, 0, 0, 0, 0, $snew_width, $snew_height, $width, $height);	
	
	// Сохраняем в jpg
	if (imagejpeg($thumb, $name, 90) && imagejpeg($sthumb, $sname, 90)) 
	{
		imagedestroy($thumb);
		imagedestroy($thumbbase);
		imagedestroy($sthumb);
		imagedestroy($sthumbbase);		
		@unlink ($src);
		return true;
	}
	return false;
}
?>
